//
// Created by wkm on 2024-04-23.
//

#include "mixcolumns_test.h"

void mixcolumns_test() {
    sc_clock clk("myclk", 2, sc_core::SC_NS);
    sc_signal<bool> start, reset;
    sc_signal<sc_uint<DATA_SIZE>> input_data_1, input_data_2, input_data_3, input_data_4,
            input_data_5, input_data_6, input_data_7, input_data_8,
            input_data_9, input_data_10, input_data_11, input_data_12,
            input_data_13, input_data_14, input_data_15, input_data_16;
    sc_signal<sc_uint<DATA_SIZE>> output_data_1, output_data_2, output_data_3, output_data_4,
            output_data_5, output_data_6, output_data_7, output_data_8,
            output_data_9, output_data_10, output_data_11, output_data_12,
            output_data_13, output_data_14, output_data_15, output_data_16;
    sc_signal<exe_state> done;

    mixcolumns my_mixcolumns("my_mixcolumns");
    my_mixcolumns.clk(clk);
    my_mixcolumns.start(start);
    my_mixcolumns.reset(reset);
    my_mixcolumns.input_data_1(input_data_1);
    my_mixcolumns.input_data_2(input_data_2);
    my_mixcolumns.input_data_3(input_data_3);
    my_mixcolumns.input_data_4(input_data_4);
    my_mixcolumns.input_data_5(input_data_5);
    my_mixcolumns.input_data_6(input_data_6);
    my_mixcolumns.input_data_7(input_data_7);
    my_mixcolumns.input_data_8(input_data_8);
    my_mixcolumns.input_data_9(input_data_9);
    my_mixcolumns.input_data_10(input_data_10);
    my_mixcolumns.input_data_11(input_data_11);
    my_mixcolumns.input_data_12(input_data_12);
    my_mixcolumns.input_data_13(input_data_13);
    my_mixcolumns.input_data_14(input_data_14);
    my_mixcolumns.input_data_15(input_data_15);
    my_mixcolumns.input_data_16(input_data_16);
    my_mixcolumns.out_data_1(output_data_1);
    my_mixcolumns.out_data_2(output_data_2);
    my_mixcolumns.out_data_3(output_data_3);
    my_mixcolumns.out_data_4(output_data_4);
    my_mixcolumns.out_data_5(output_data_5);
    my_mixcolumns.out_data_6(output_data_6);
    my_mixcolumns.out_data_7(output_data_7);
    my_mixcolumns.out_data_8(output_data_8);
    my_mixcolumns.out_data_9(output_data_9);
    my_mixcolumns.out_data_10(output_data_10);
    my_mixcolumns.out_data_11(output_data_11);
    my_mixcolumns.out_data_12(output_data_12);
    my_mixcolumns.out_data_13(output_data_13);
    my_mixcolumns.out_data_14(output_data_14);
    my_mixcolumns.out_data_15(output_data_15);
    my_mixcolumns.out_data_16(output_data_16);
    my_mixcolumns.done(done);

    mixcolumns_driver my_mixcolumns_driver("my_mixcolumns_driver");
    my_mixcolumns_driver.d_clk(clk);
    my_mixcolumns_driver.d_start(start);
    my_mixcolumns_driver.d_reset(reset);
    my_mixcolumns_driver.d_input_data_1(input_data_1);
    my_mixcolumns_driver.d_input_data_2(input_data_2);
    my_mixcolumns_driver.d_input_data_3(input_data_3);
    my_mixcolumns_driver.d_input_data_4(input_data_4);
    my_mixcolumns_driver.d_input_data_5(input_data_5);
    my_mixcolumns_driver.d_input_data_6(input_data_6);
    my_mixcolumns_driver.d_input_data_7(input_data_7);
    my_mixcolumns_driver.d_input_data_8(input_data_8);
    my_mixcolumns_driver.d_input_data_9(input_data_9);
    my_mixcolumns_driver.d_input_data_10(input_data_10);
    my_mixcolumns_driver.d_input_data_11(input_data_11);
    my_mixcolumns_driver.d_input_data_12(input_data_12);
    my_mixcolumns_driver.d_input_data_13(input_data_13);
    my_mixcolumns_driver.d_input_data_14(input_data_14);
    my_mixcolumns_driver.d_input_data_15(input_data_15);
    my_mixcolumns_driver.d_input_data_16(input_data_16);

    mixcolumns_monitor my_mixcolumns_monitor("my_mixcolumns_monitor");
    my_mixcolumns_monitor.m_done(done);
    my_mixcolumns_monitor.m_output_data_1(output_data_1);
    my_mixcolumns_monitor.m_output_data_2(output_data_2);
    my_mixcolumns_monitor.m_output_data_3(output_data_3);
    my_mixcolumns_monitor.m_output_data_4(output_data_4);
    my_mixcolumns_monitor.m_output_data_5(output_data_5);
    my_mixcolumns_monitor.m_output_data_6(output_data_6);
    my_mixcolumns_monitor.m_output_data_7(output_data_7);
    my_mixcolumns_monitor.m_output_data_8(output_data_8);
    my_mixcolumns_monitor.m_output_data_9(output_data_9);
    my_mixcolumns_monitor.m_output_data_10(output_data_10);
    my_mixcolumns_monitor.m_output_data_11(output_data_11);
    my_mixcolumns_monitor.m_output_data_12(output_data_12);
    my_mixcolumns_monitor.m_output_data_13(output_data_13);
    my_mixcolumns_monitor.m_output_data_14(output_data_14);
    my_mixcolumns_monitor.m_output_data_15(output_data_15);
    my_mixcolumns_monitor.m_output_data_16(output_data_16);

    sc_start();
}